package com.insight.modules.system.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Param;
import com.insight.modules.system.entity.LoginPojo;
import com.insight.modules.system.entity.SysLog;
import org.springframework.stereotype.Component;

import java.util.Date;
import java.util.List;
import java.util.Map;

/**
 * <p>
 * 系统日志表 Mapper 接口
 * </p>
 *
 * @Author zhangweijian
 * @since 2018-12-26
 */
@Component
public interface SysLogMapper extends BaseMapper<SysLog> {

	/**
	 * 清空所有日志记录，慎用该操作，会删除所有日志数据。
	 */
	void removeAll();

	/**
	 * 获取系统的总访问次数（统计所有访问记录）。
	 *
	 * @return 系统总访问次数，类型为 Long
	 */
	Long findTotalVisitCount();

	// update-begin--Author: zhangweijian  Date: 20190428
	/**
	 * 获取指定时间范围内的访问次数，通常用于获取当天访问量。
	 *
	 * @param dayStart 查询开始时间（包含）
	 * @param dayEnd   查询结束时间（包含）
	 * @return 指定时间范围内的访问次数，类型为 Long
	 */
	Long findTodayVisitCount(@Param("dayStart") Date dayStart, @Param("dayEnd") Date dayEnd);

	/**
	 * 获取指定时间范围内的访问IP数量（去重后的访问IP数）。
	 *
	 * @param dayStart 查询开始时间（包含）
	 * @param dayEnd   查询结束时间（包含）
	 * @return 指定时间范围内的唯一访问IP数量，类型为 Long
	 */
	Long findTodayIp(@Param("dayStart") Date dayStart, @Param("dayEnd") Date dayEnd);
	// update-end--Author: zhangweijian  Date: 20190428

	/**
	 * 首页统计接口：根据时间段统计访问次数和访问IP数量，支持不同数据库类型。
	 *
	 * @param dayStart 查询开始时间（包含）
	 * @param dayEnd   查询结束时间（包含）
	 * @param dbType   数据库类型，用于适配不同SQL语法（例如：mysql、oracle）
	 * @return 返回一个包含统计数据的列表，每个元素为键值对，包含访问次数、访问IP等字段
	 */
	List<Map<String, Object>> findVisitCount(@Param("dayStart") Date dayStart,
											 @Param("dayEnd") Date dayEnd,
											 @Param("dbType") String dbType);

	/**
	 * 根据用户ID查询对应的日志记录列表。
	 *
	 * @param userid 用户ID
	 * @return 该用户的日志列表
	 */
	List<SysLog> selectLogs(@Param("userid") String userid);

	/**
	 * 根据时间参数统计登录相关信息。
	 *
	 * @param times 时间参数，格式或含义由业务决定
	 * @return 返回登录统计数据列表，封装为 LoginPojo 对象
	 */
	List<LoginPojo> getCount(@Param("times") String times);
}

